<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="robots" content="noodp" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
        <title>《Dar JIT和AOT》 - Lucklyの博客 - 在阅读中遇见自己</title><meta name="Description" content="早起的年轻人做的网站"><meta property="og:title" content="《Dar JIT和AOT》" />
<meta property="og:description" content="
本文主要简单聊聊 Dart 的 JIT 和 AOT 模式
" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://luckly.work/dar-jit%E5%92%8Caot/" />
<meta property="og:image" content="https://luckly.work/logo.png"/>
<meta property="article:published_time" content="2021-06-24T21:41:33+08:00" />
<meta property="article:modified_time" content="2021-06-24T21:41:33+08:00" />
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="https://luckly.work/logo.png"/>

<meta name="twitter:title" content="《Dar JIT和AOT》"/>
<meta name="twitter:description" content="
本文主要简单聊聊 Dart 的 JIT 和 AOT 模式
"/>
<meta name="application-name" content="LoveIt">
<meta name="apple-mobile-web-app-title" content="LoveIt"><meta name="theme-color" content="#ffffff"><meta name="msapplication-TileColor" content="#da532c"><link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
        <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
        <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"><link rel="manifest" href="/site.webmanifest"><link rel="canonical" href="https://luckly.work/dar-jit%E5%92%8Caot/" /><link rel="prev" href="https://luckly.work/dart-file/" /><link rel="next" href="https://luckly.work/%E5%9C%A8flutter%E4%B8%AD%E6%9E%84%E5%BB%BAsuingapp/" /><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.min.css"><link rel="stylesheet" href="/css/style.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.0/css/all.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.7.2/animate.min.css"><script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "BlogPosting",
        "headline": "《Dar JIT和AOT》",
        "inLanguage": "zh-CN",
        "mainEntityOfPage": {
            "@type": "WebPage",
            "@id": "https:\/\/luckly.work\/dar-jit%E5%92%8Caot\/"
        },"image": [{
                            "@type": "ImageObject",
                            "url": "https:\/\/luckly.work\/images\/Apple-Devices-Preview.png",
                            "width":  3200 ,
                            "height":  2048 
                        }],"genre": "posts","keywords": "flutter","wordcount":  1086 ,
        "url": "https:\/\/luckly.work\/dar-jit%E5%92%8Caot\/","datePublished": "2021-06-24T21:41:33+08:00","dateModified": "2021-06-24T21:41:33+08:00","license": "This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.","publisher": {
            "@type": "Organization",
            "name": "xxxx","logo": {
                    "@type": "ImageObject",
                    "url": "https:\/\/luckly.work\/images\/avatar.png",
                    "width":  528 ,
                    "height":  560 
                }},"author": {
                "@type": "Person",
                "name": "早起的年轻人"
            },"description": ""
    }
    </script></head>
    <body header-desktop="fixed" header-mobile="auto"><script type="text/javascript">(window.localStorage && localStorage.getItem('theme') ? localStorage.getItem('theme') === 'dark' : ('auto' === 'auto' ? window.matchMedia('(prefers-color-scheme: dark)').matches : 'auto' === 'dark')) && document.body.setAttribute('theme', 'dark');</script>

        <div id="mask"></div><div class="wrapper"><div class="logo-wrapper">
  <a href="/%20/" class="logo">Lucklyの博客 - 在阅读中遇见自己</a>
</div>

<nav class="site-navbar">
  <ul id="menu" class="menu">
    <li class="menu-item">
      <a class="menu-item-link" href="/posts/">所有文章</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/categories/flutter/">Flutter</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/categories/read/">读书笔记</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/categories/go/">Go</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/tags/">标签</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/categories/">分类</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/about/">关于</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="https://github.com/ITmxs">Github</a>
    </li><li class="menu-item">
      <a class="menu-item-link" href="/friend/">友链</a>
    </li>
  </ul>
</nav><main class="main">
                <div class="container"><div class="toc" id="toc-auto">
            <h2 class="toc-title">目录</h2>
            <div class="toc-content" id="toc-content-auto"></div>
        </div><article class="page single"><h1 class="single-title animated flipInX">《Dar JIT和AOT》</h1><div class="post-meta">
            <div class="post-meta-line"><span class="post-author"><a href="/" title="Author" rel=" author" class="author"><i class="fas fa-user-circle fa-fw"></i>早起的年轻人</a></span>&nbsp;<span class="post-category">收录于 <a href="/categories/flutter/"><i class="far fa-folder fa-fw"></i>Flutter</a></span></div>
            <div class="post-meta-line"><i class="far fa-calendar-alt fa-fw"></i>&nbsp;<time datetime="2021-06-24">2021-06-24</time>&nbsp;<i class="fas fa-pencil-alt fa-fw"></i>&nbsp;约 1086 字&nbsp;
                <i class="far fa-clock fa-fw"></i>&nbsp;预计阅读 3 分钟&nbsp;</div>
        </div><div class="featured-image"><img
        class="lazyload"
        src="/svg/loading.min.svg"
        data-src="https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png"
        data-srcset="https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png, https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png 1.5x, https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png 2x"
        data-sizes="auto"
        alt="https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png"
        title="https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png" /></div><div class="details toc" id="toc-static"  kept="">
                <div class="details-summary toc-title">
                    <span>目录</span>
                    <span><i class="details-icon fas fa-angle-right"></i></span>
                </div>
                <div class="details-content toc-content" id="toc-content-static"><nav id="TableOfContents">
  <ul>
    <li><a href="#命令行工具">命令行工具</a>
      <ul>
        <li><a href="#dart-vm-tool">dart VM tool</a></li>
        <li><a href="#dart2nativehttpsdartdevtoolsdart2native"><a href="https://dart.dev/tools/dart2native">dart2native</a></a></li>
        <li><a href="#dartaotruntimehttpsdartdevtoolsdartaotruntime"><a href="https://dart.dev/tools/dartaotruntime">dartaotruntime</a></a></li>
      </ul>
    </li>
    <li><a href="#性能测试">性能测试</a></li>
    <li><a href="#参考">参考</a></li>
  </ul>
</nav></div>
            </div><div class="content" id="content"><blockquote>
<p>本文主要简单聊聊 Dart 的 JIT 和 AOT 模式</p>
</blockquote>
<p>Dart 官方有如下介绍：</p>
<blockquote>
<p>Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code</p>
</blockquote>
<p><img
        class="lazyload"
        src="/svg/loading.min.svg"
        data-src="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734544331781.jpg"
        data-srcset="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734544331781.jpg, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734544331781.jpg 1.5x, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734544331781.jpg 2x"
        data-sizes="auto"
        alt="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734544331781.jpg"
        title="-w725" /></p>
<blockquote>
<p>Dart Native enables running Dart code compiled to native ARM or X64 machine code for mobile, desktop, and server apps.</p>
</blockquote>
<p>简单来说，Dart Native 同时支持 JIT 和 AOT。Dart 这种设计好处如下：</p>
<ul>
<li>Dart VM JIT 便于轻量快速开发，它既支持纯解释执行，也可对代码进行运行时优化</li>
<li>Dart AOT 编译器将代码编译成原生的 ARM 或 X64 代码，提升发布的代码运行效率</li>
</ul>
<h1 id="命令行工具">命令行工具</h1>
<p>Dart SDK 分别为 JIT 和 AOT 提供不同的工具。</p>
<h2 id="dart-vm-tool">dart VM tool</h2>
<p><a href="https://dart.dev/tools/dart-vm" target="_blank" rel="noopener noreffer">dart | Dart</a>。</p>
<blockquote>
<p>You can use the dart tool (bin/dart) to run Dart command-line apps such as server-side scripts, programs, and servers.</p>
</blockquote>
<p><code>dart</code> 命令支持如下的常用选项：</p>
<ul>
<li><code>--enable-asserts</code> - 开启断言</li>
<li><code>--version</code> - 查看 Dart VM 版本</li>
</ul>
<p>另外它还支持 Observatory 选项，用于分析和调试 Dart 程序。常用选项包括：</p>
<ul>
<li><code>--enable-vm-service</code> - 在本地 8181 端口开启 Observatory 服务</li>
<li><code>--observe</code> - 相当于同时指定 <code>--enable-vm-service</code> 和 <code>--pause-isolates-on-exit</code></li>
</ul>
<p><img
        class="lazyload"
        src="/svg/loading.min.svg"
        data-src="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734559193856.jpg"
        data-srcset="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734559193856.jpg, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734559193856.jpg 1.5x, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734559193856.jpg 2x"
        data-sizes="auto"
        alt="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15734559193856.jpg"
        title="-w794" /></p>
<p>(小技巧：如果你是使用的是 iTerm，按住 Command 键后将光标放在)</p>
<p>关于 Observatory 的更多用法见 <a href="https://dart-lang.github.io/observatory/" target="_blank" rel="noopener noreffer">Observatory</a>。</p>
<h2 id="dart2nativehttpsdartdevtoolsdart2native"><a href="https://dart.dev/tools/dart2native" target="_blank" rel="noopener noreffer">dart2native</a></h2>
<blockquote>
<p>Releases before Dart 2.6 contained a tool named dart2aot that produced AOT snapshots. The dart2native command replaces dart2aot and has a superset of the dart2aot functionality.</p>
</blockquote>
<blockquote>
<p>Dart 2.6 is now available, with support for compiling to self-contained, native executables.</p>
</blockquote>
<p>Dart 语言本身还在快速演化中。所以要注意以下变化：</p>
<ul>
<li>在 Dart 2.6 以及之前版本，<code>dart2aot</code> 用于生成 AOT 镜像</li>
<li>Dart 2.6 之后，<code>dart2native</code> 命令取代了 <code>dart2aot</code> (前者是后者的超集)。</li>
</ul>
<p>Dart 2.6 近期刚刚发布，这个版本开始才支持将 Dart 代码编译成自包含、独立的原生可执行程序。(当然，这只是形式上的改进，并不是 Dart 中的新技术，因为相关技术很早用于 Flutter 平台了)。</p>
<p>使用 <code>dart2native</code> 命令将对 Dart 程序进行 AOT (ahead-of-time) 编译，生成原生 ARM 或 X64 机器码。</p>
<p><code>dart2native</code> 命令的产物分成两种。一种是 <strong>独立的可执行程序</strong> (缺省是这种)，它是原生的机器码，由 Dart 代码及其依赖编译而来，再加上一个很小用于类型检查和垃圾回收的 Dart 运行时。</p>
<p><code>dart2native</code> 命令用法如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">dart2native bin/main.dart -o bin/my_app
cp bin/my_app .
./my_app
</code></pre></td></tr></table>
</div>
</div><p>另一种是 <strong>AOT snapshot</strong>，它不包含 Dart 运行时，所以需要使用 <code>dartaotruntime</code> 来运行。</p>
<h2 id="dartaotruntimehttpsdartdevtoolsdartaotruntime"><a href="https://dart.dev/tools/dartaotruntime" target="_blank" rel="noopener noreffer">dartaotruntime</a></h2>
<p><code>dartaotruntime</code> 命令用法如下：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">dart2native bin/main.dart -k aot
dartaotruntime bin/main.aot
</code></pre></td></tr></table>
</div>
</div><p>Flutter 采用 AOT snapshot 这种形式。讲 Flutter 架构时会看到这张图，</p>
<p><img
        class="lazyload"
        src="/svg/loading.min.svg"
        data-src="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/14/15737038527917.jpg"
        data-srcset="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/14/15737038527917.jpg, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/14/15737038527917.jpg 1.5x, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/14/15737038527917.jpg 2x"
        data-sizes="auto"
        alt="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/14/15737038527917.jpg"
        title="img" /></p>
<p>图中 Flutter Engine 层中的 Dart 即 Dart 运行时，也正是这里提到的 <code>dartaotruntime</code>。</p>
<p>不过 Flutter 自带的 Dart SDK 中似乎找不到 <code>dart2aot</code> 或 <code>dart2native</code> 命令，以下两个 issue 提到了这个问题。</p>
<ul>
<li><a href="https://github.com/flutter/flutter/issues/32633" target="_blank" rel="noopener noreffer">dart2aot does not exist on the Dart SDK · Issue #32633 · flutter/flutter</a></li>
<li><a href="https://github.com/dart-lang/sdk/issues/36892" target="_blank" rel="noopener noreffer">The ‘dart2aot’ tool is missing from the Dart SDK debian package · Issue #36892 · dart-lang/sdk</a></li>
</ul>
<p><a href="https://medium.com/dartlang/dart2native-a76c815e6baf" target="_blank" rel="noopener noreffer">Announcing Dart 2.6 with dart2native: Compile Dart to self-contained, native executables</a> 对 Flutter 中不包含 <code>dart2aot</code> 或 <code>dart2native</code> 有如下解释：</p>
<blockquote>
<p>If you’re getting the Dart SDK via Flutter, note that current Flutter builds have incomplete dart2native support. Until Dart 2.6 reaches Flutter stable, we recommend you install the Dart 2.6 SDK from dart.dev/get-dart.</p>
</blockquote>
<p>可以从 <a href="https://dart.dev/tools/sdk/archive" target="_blank" rel="noopener noreffer">Dart 官网</a> 下载安装 Dart SDK，它包含 <code>dart2native</code> 命令。</p>
<p><img
        class="lazyload"
        src="/svg/loading.min.svg"
        data-src="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735268131869.jpg"
        data-srcset="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735268131869.jpg, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735268131869.jpg 1.5x, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735268131869.jpg 2x"
        data-sizes="auto"
        alt="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735268131869.jpg"
        title="Dart SDK 中的 dart2native 命令" /></p>
<h1 id="性能测试">性能测试</h1>
<p>写一个简单的 Dart 程序分别测试下 JIT 和 AOT 模式的性能。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">// demo.dart
main(List&lt;String&gt; args) {
  double area;
  for (int i = 0; i &lt; 50000000; i++) {
    area = i * 3.14 * 3.14;
  }
}
</code></pre></td></tr></table>
</div>
</div><p><img
        class="lazyload"
        src="/svg/loading.min.svg"
        data-src="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735258635004.jpg"
        data-srcset="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735258635004.jpg, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735258635004.jpg 1.5x, https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735258635004.jpg 2x"
        data-sizes="auto"
        alt="https://blog-1251688504.cos.ap-shanghai.myqcloud.com/2019/11/13/15735258635004.jpg"
        title="-w779" /></p>
<p>从测试数据可以看到，AOT 下的执行效率确实比 JIT 高多了。</p>
<p>Update: 2019-11-23 16:48</p>
<p><a href="https://renato.athaydes.com/posts/interesting-dart-features.html#quick-dart-overview" target="_blank" rel="noopener noreffer">这篇文章</a> 中 “Dart is as slow as Python” 这一节提到了 Dart 的性能问题，这里可以找到很多参考数据</p>
<h1 id="参考">参考</h1>
<ul>
<li><a href="https://dart.dev/platforms#dart-native-vm-jit-and-aot" target="_blank" rel="noopener noreffer">Platforms | Dart</a></li>
<li><a href="https://medium.com/dartlang/dart2native-a76c815e6baf" target="_blank" rel="noopener noreffer">Announcing Dart 2.6 with dart2native: Compile Dart to self-contained, native executables</a></li>
</ul></div><div class="post-footer" id="post-footer">
    <div class="post-info">
        <div class="post-info-line">
            <div class="post-info-mod">
                <span>更新于 2021-06-24</span>
            </div>
            <div class="post-info-license"></div>
        </div>
        <div class="post-info-line">
            <div class="post-info-md"></div>
            <div class="post-info-share">
                <span><a href="javascript:void(0);" title="分享到 Twitter" data-sharer="twitter" data-url="https://luckly.work/dar-jit%E5%92%8Caot/" data-title="《Dar JIT和AOT》" data-hashtags="flutter"><i class="fab fa-twitter fa-fw"></i></a><a href="javascript:void(0);" title="分享到 Facebook" data-sharer="facebook" data-url="https://luckly.work/dar-jit%E5%92%8Caot/" data-hashtag="flutter"><i class="fab fa-facebook-square fa-fw"></i></a><a href="javascript:void(0);" title="分享到 Hacker News" data-sharer="hackernews" data-url="https://luckly.work/dar-jit%E5%92%8Caot/" data-title="《Dar JIT和AOT》"><i class="fab fa-hacker-news fa-fw"></i></a><a href="javascript:void(0);" title="分享到 Line" data-sharer="line" data-url="https://luckly.work/dar-jit%E5%92%8Caot/" data-title="《Dar JIT和AOT》"><i data-svg-src="https://cdn.jsdelivr.net/npm/simple-icons@2.14.0/icons/line.svg"></i></a><a href="javascript:void(0);" title="分享到 微博" data-sharer="weibo" data-url="https://luckly.work/dar-jit%E5%92%8Caot/" data-title="《Dar JIT和AOT》" data-image="https://luckly007.oss-cn-beijing.aliyuncs.com/img/90c6cc12-742e-4c9f-b318-b912f163b8d0.png"><i class="fab fa-weibo fa-fw"></i></a></span>
            </div>
        </div>
    </div>

    <div class="post-info-more">
        <section class="post-tags"><i class="fas fa-tags fa-fw"></i>&nbsp;<a href="/tags/flutter/">flutter</a></section>
        <section>
            <span><a href="javascript:void(0);" onclick="window.history.back();">返回</a></span>&nbsp;|&nbsp;<span><a href="/">主页</a></span>
        </section>
    </div>

    <div class="post-nav"><a href="/dart-file/" class="prev" rel="prev" title="《Dart File》"><i class="fas fa-angle-left fa-fw"></i>《Dart File》</a>
            <a href="/%E5%9C%A8flutter%E4%B8%AD%E6%9E%84%E5%BB%BAsuingapp/" class="next" rel="next" title="《在Flutter中构建suingAPP》">《在Flutter中构建suingAPP》<i class="fas fa-angle-right fa-fw"></i></a></div>
</div>
</article></div>
            </main><footer class="footer">
        <div class="footer-container"><div class="footer-line">由 <a href="https://gohugo.io/" target="_blank" rel="noopener noreffer" title="Hugo 0.79.1">Hugo</a> 强力驱动 | 主题 - <a href="https://github.com/dillonzq/LoveIt" target="_blank" rel="noopener noreffer" title="LoveIt 0.2.10"><i class="far fa-kiss-wink-heart fa-fw"></i> LoveIt</a>
                </div><div class="footer-line"><i class="far fa-copyright fa-fw"></i><span itemprop="copyrightYear">2021</span><span class="author" itemprop="copyrightHolder">&nbsp;<a href="/" target="_blank">早起的年轻人</a></span>&nbsp;|&nbsp;<span class="license"><a rel="license external nofollow noopener noreffer" href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank">CC BY-NC 4.0</a></span></div>
        </div>
    </footer></div>

        <div id="fixed-buttons"><a href="#" id="back-to-top" class="fixed-button" title="回到顶部">
                <i class="fas fa-arrow-up fa-fw"></i>
            </a><a href="#" id="view-comments" class="fixed-button" title="查看评论">
                <i class="fas fa-comment fa-fw"></i>
            </a>
        </div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.css"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/smooth-scroll@16.1.3/dist/smooth-scroll.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/autocomplete.js@0.37.1/dist/autocomplete.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/algoliasearch@4.2.0/dist/algoliasearch-lite.umd.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lazysizes@5.2.2/lazysizes.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/sharer.js@0.4.0/sharer.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.js"></script><script type="text/javascript">window.config={"code":{"copyTitle":"复制到剪贴板","maxShownLines":10},"comment":{},"cookieconsent":{"content":{"dismiss":"同意","link":"了解更多","message":"本网站使用 Cookies 来改善您的浏览体验."},"enable":true,"palette":{"button":{"background":"#f0f0f0"},"popup":{"background":"#1aa3ff"}},"theme":"edgeless"},"search":{"algoliaAppID":"PASDMWALPK","algoliaIndex":"index.zh-cn","algoliaSearchKey":"b42948e51daaa93df92381c8e2ac0f93","highlightTag":"em","maxResultLength":10,"noResultsFound":"没有找到结果","snippetLength":50,"type":"algolia"}};</script><script type="text/javascript" src="/js/theme.min.js"></script></body>
</html>
